package com.mingda.weathermagiccenter.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.mingda.weathermagiccenter.mapper.WsStationDataCurMapper;
import com.mingda.weathermagiccenter.mapper.WsStationFcDataMapper;
import com.mingda.weathermagiccenter.pojo.WsStationDataCur;
import com.mingda.weathermagiccenter.pojo.WsStationFcData;
import com.mingda.weathermagiccenter.pojo.WsStationFcDataCur;
import com.mingda.weathermagiccenter.service.WsStationFcDataCurService;
import com.mingda.weathermagiccenter.mapper.WsStationFcDataCurMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author Administrator
* @description 针对表【ws_station_fc_data_cur(天气预报表)】的数据库操作Service实现
* @createDate 2025-09-28 13:46:34
*/
@Service
public class WsStationFcDataCurServiceImpl extends ServiceImpl<WsStationFcDataCurMapper, WsStationFcDataCur>
    implements WsStationFcDataCurService{

    @Autowired
    WsStationFcDataCurMapper mapper;

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean saveOrUpdateBatchById(List<WsStationFcDataCur> list) {

        if (CollectionUtils.isEmpty(list)) {
            return true;
        }
        // 1) 收集要删除的 stationkey：去重以避免重复删除
        List<String> stationKeys = list.stream()
                .map(WsStationFcDataCur::getStationkey)
                .filter(Objects::nonNull)
                .distinct()
                .collect(Collectors.toList());

        // 2) 事务内先删除已存在的记录，按照 stationkey 删除
        if (!stationKeys.isEmpty()) {
            // 根据你的 MyBatis-Plus 配置，使用 LambdaQueryWrapper 或其它方式构造删除条件
            LambdaQueryWrapper<WsStationFcDataCur> deleteWrapper = Wrappers.<WsStationFcDataCur>lambdaQuery()
                    .in(WsStationFcDataCur::getStationkey, stationKeys);
            mapper.delete(deleteWrapper);
        }

        // 3) 重新批量插入
        // 假设你们的 mapper 提供了 batch insert 的能力，直接调用
        // 如果原来是通过 saveOrUpdateBatch 的插入分支，请使用与你的代码风格一致的批量插入方法
        boolean insertResult = false;
        try {
            // 此处调用你现有的批量插入实现路径。示例给出两种常见写法：
            // a) 如果你已存在一个批量插入方法：
            mapper.insert(list);
            insertResult = true;
        } catch (Exception e) {
            // 回滚由 @Transactional 控制，抛出异常即可让事务回滚
            throw e;
        }
        return insertResult;
    }

}




